第九讲 R-单样本Wilcoxon检验
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
在上一讲中,我们介绍了第八讲 R-单样本T检验(点我可跳转)。在第八讲中,我们讲到了单样本t检验的假设条件是样本分布需要符合正态性。
但是,当样本分布非正态,且经过一定的数值转换尝试后,仍然无法满足正态性要求时,单样本的Wilcoxon符号秩检验成为备选方法。
它将非正态样本的中位数与已知标准(或理论/假设)值(总体中位数)进行比较。它是一种非参数样本检验,基于样本的秩次排列,而非平均值。
注意,当数据呈非正态分布时,选择Wilcoxon检验。可以使用Shapiro-Wilk test进行检查。请参看第六讲 R-数据正态分布检验
1. 研究问题和统计假设
中位数(m)是否等于理论值(μ)? 中位数(m)是否小于理论值(μ)? 中位数(m)是否大于理论值(μ)?
在统计数据中,我们可以定义相应的无效假设(H0) 如下:
假设1)H0:m = μ
假设2)H0:m≤ μ
假设3)H0:m≥ μ
相应的备择假设(H1)如下:
假设1)H1:m ≠ μ (不同)
假设2)H1:m> m(大于)
假设3)H1:m< μ(小于)
假设1)称为双向检验
假设2)和3)称为单向检验
2. 单样本Wilcoxon检验的原理
单样本Wilcoxon符号秩统计量的思想是
(1)首先把样本与总体中位数(理论值)的差值的绝对值|X1|、|X2|、|X3|……|Xn|进行排序,其顺序统计量为|X|(1)、|X|(2)、|X|(3)……|X|(n)。
(2)如果数据与总体中位数相同,则其差值会关于零点对称,对称中心两侧数据的疏密和取负值的数据交错出现,取正值数据在样本绝对值样本中的秩和与取负值数据在绝对值样本中的秩和应近似相等,概率均为0.5。
(3)在求得正值秩和和负值秩和后,通过较小秩和和自由度(n-1)查询相应T界值表,获得相应P值。
如果p值低于或等于显着性水平0.05,我们可以拒绝无效假设并接受备择假设。换句话说,我们得出结论,样本代表的总体中位数与理论中位数有显着差异。
3. 用R完成单样本Wilcoxon检验
可以使用R函数wilcox.test()计算单样本Wilcoxon检验:
wilcox.test(x, mu = 0, alternative = "two.sided")
x:包含数据值的一个数字向量
mu:理论值。默认值为0,但可以更改。
alternative:备择假设。允许值为“two.sided”(默认),也可以根据需要设置为“greater”或“less”之一。
在这里,我们将使用名为DNase的内置R数据集。我们之后会检验DNase数据中conc(蛋白浓度)与理论值3.0之间是否有统计学差异。
# 导入R内自带的DNase数据集
library(datasets)
data(DNase)
# 将数据存储在变量my_data中
my_data <- DNase
你可以使用head()和tails()函数检查数据,这将分别显示数据的第一部分和最后一部分。
# 显示前六行内容
head(my_data)
Grouped Data: density ~ conc | Run
Run conc density
1 1 0.04882812 0.017
2 1 0.04882812 0.018
3 1 0.19531250 0.121
4 1 0.19531250 0.124
5 1 0.39062500 0.206
6 1 0.39062500 0.215
我们想知道,实验中的conc变量(蛋白浓度)是否不同于理论值3.0?
# conc的统计学概况 (更多详情请参看第四讲 R-描述性统计分析)
summary(my_data$conc)
结果输出
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.04883 0.34180 1.17188 3.10669 3.90625 12.50000
2.4.1 密度图
2.4.2 QQ图
2.4.3 正态性检验(shapiro-Wilk检验)
shapiro.test(my_data$conc)
输出结果
Shapiro-Wilk normality test
data: my_data$conc
W = 0.71508, p-value < 2.2e-16
由上视觉分析及正态性检验显示,conc不符合正态性分布,远无法满足单样本t检验的假设条件(P<<0.05),需要考虑Wilcoxon检验。
# 单样本Wilcoxon检验
test <- wilcox.test(my_data$conc, mu = 3)
# 显示结果
test
输出结果
Wilcoxon signed rank test with continuity correction
data: my_data$conc
V = 7051, p-value = 0.2756
alternative hypothesis: true location is not equal to 3
在上面的结果中:
p值是t检验的显着性水平(p值=8.4e-05)。
如果要检验蛋白浓度是否小于3(单向测试),请输入以下内容:
wilcoxon.test(my_data$conc, mu = 3,alternative = "less")
或者,如果要检验蛋白浓度是否大于3(单向测试),请输入以下命令:
wilcoxon.test(my_data$conc, mu = 3,alternative = "greater")
检验的p值为0.28,大于显着性水平alpha = 0.05。我们可以得出结论,蛋白浓度与3无显著性差异,p值 = 0.28。
# 打印p值
test$p.value
[1] 0.2756
好了,本期讲解就先到这里。小伙伴们赶紧试起来吧。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
第二讲 R-编程基础-运算、数据类型和向量等基本介绍
第三讲 R编程基础-矩阵和数据框
第四讲 R-描述性统计分析
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」
更多科研干货在等你!
麻烦点一下在看再走呗